/**
 * Fichier Enseignant.java : Définition de classe
 * fr.unice.gnpt.gui.utilisateur.Enseignant : Configuration pour enseignants
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.gui.utilisateur;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;

import net.miginfocom.layout.CC;
import net.miginfocom.swing.MigLayout;
import fr.unice.gnpt.Main;
import fr.unice.gnpt.core.Cours;
import fr.unice.gnpt.core.Enseignant;
import fr.unice.gnpt.core.Enseignement;
import fr.unice.gnpt.core.Service;
import fr.unice.gnpt.core.TacheAdministrative;
import fr.unice.gnpt.core.dao.DaoEnseignant;
import fr.unice.gnpt.core.dao.DaoException;
import fr.unice.gnpt.core.dao.DaoService;
import fr.unice.gnpt.core.dao.connexion.Connexion;
import fr.unice.gnpt.core.dao.connexion.ConnexionException;
import fr.unice.gnpt.gui.Interface;
import fr.unice.gnpt.gui.util.PseudoEnseignement;

/**
 * Classe de configuration de l'interface graphique pour un utilisateur
 * enseignant.
 * <p>
 * Permet de gérer facilement les accès autorisés aux enseignants.
 * 
 * @author gnpt
 * @version 0.0.2
 */
public class UtilEnseignant extends Utilisateur {
	private Enseignant utilCourant = null;
	private JTextField nbGroupesTD;
	private JLabel nbGroupesTDRestant;
	private JTextField nbGroupesTP;
	private JLabel nbGroupesTPRestant;
	private JCheckBox selectCM;
	private JButton boutonAjouter;
	private JLabel nombreHeure;

	// Champs du formulaire de nouvelle tache administrative
	private JPanel formulaireTA = null;
	// private JComboBox formulaireTAEnseignant;
	private JTextField formulaireTADescription;
	private JTextField formulaireTAHetd;
	private JButton formulaireTABoutonAjouter;
	private JButton buttonSupprimer;
	private JButton buttonChoisir;

	/**
	 * Constructeur par défaut.
	 * 
	 * @param parent
	 *            l'interface qui contient cet objet.
	 */
	public UtilEnseignant(Interface parent) {
		super(parent);

		this.nbGroupesTD = new JTextField("0", 10);
		this.nbGroupesTP = new JTextField("0", 10);
		this.nbGroupesTDRestant = new JLabel("Restant -/-", 10);
		this.nbGroupesTPRestant = new JLabel("Restant -/-", 10);
		this.selectCM = new JCheckBox();
	}

	/**
	 * Permet à l'enseignant de s'identifier avec son nom.
	 */
	public void identification() {
		JPanel info = new JPanel(new MigLayout());
		info.add(new JLabel("Veuillez vous identifier."), "wrap");

		Object[] listEnseign = this.getCollEnseignantsArray();

		if (listEnseign.length > 0) {
			this.utilCourant = (Enseignant) JOptionPane.showInputDialog(null,
					info, "Suite de l'identification",
					JOptionPane.PLAIN_MESSAGE, null, listEnseign,
					listEnseign[0]);
		} else {
			JOptionPane
					.showMessageDialog(
							null,
							new JLabel(
									"<html>Aucun enseignant n'est enregistré.<br>Vous ne pouvez pas vous connecter.</html>"),
							"Problème de connexion", JOptionPane.ERROR_MESSAGE);
		}

		if (this.utilCourant == null) {
			Main.exit(0);
		}
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#creerCadreGauche()
	 */
	@Override
	public void creerCadreGauche() {
		super.creerCadreGauche();

		JPanel gauche = new JPanel(new MigLayout("", "5[grow,fill]5", "[]"));

		// this.nomUtil = new JLabel(this.utilCourant.toString());
		// gauche.add(this.nomUtil, "wrap");

		this.nombreHeure = new JLabel(this.utilCourant
				.calcEtRetNbTotalHeuresEquivalent()
				+ " / " + this.utilCourant.getNombreHeuresDues() + " heures");
		this.nombreHeure.setBorder(BorderFactory
				.createTitledBorder(this.utilCourant.toString()));
		gauche.add(this.nombreHeure, "wrap");

		JButton choixUtil = new JButton("Voir mes choix");
		choixUtil.setActionCommand("choixUtil");
		choixUtil.addActionListener(this.getListener());
		gauche.add(choixUtil, "wrap");
		gauche.add(new JSeparator(), "wrap");

		super.getCadreGauche().add(gauche, new CC().dockNorth());
	}

	/**
	 * Met à jour les informations sur l'enseignant loggué.
	 */
	public void updateCadreGauche() {
		this.nombreHeure.setText(this.utilCourant
				.calcEtRetNbTotalHeuresEquivalent()
				+ " / " + this.utilCourant.getNombreHeuresDues() + " heures");
		this.nombreHeure.setBorder(BorderFactory
				.createTitledBorder(this.utilCourant.toString()));
		this.getCadreGauche().validate();
	}

	/**
	 * Initialisation de la barre d'ajout d'Enseignement.
	 */
	public void creerFormulaireEnseignement() {
		this.boutonAjouter = new JButton("Ajouter");
		this.boutonAjouter.setActionCommand("ajouterService");
		this.boutonAjouter.addActionListener(this.getListener());
		this.boutonAjouter.setEnabled(false);

		this.selectCM.setActionCommand("choixCM");
		this.selectCM.addActionListener(this.getListener());
		this.nbGroupesTD.setName("choixTD");
		this.nbGroupesTD.addKeyListener(this.getListener());
		this.nbGroupesTP.setName("choixTP");
		this.nbGroupesTP.addKeyListener(this.getListener());

		this.setFormulaire(new JPanel(new MigLayout("", "10[grow,fill]10",
				"10[]")));
		this.getFormulaire().add(new JLabel("Cours :"));
		this.getFormulaire().add(this.getListeCours());
		this.getFormulaire().add(new JLabel("CM :"));
		this.getFormulaire().add(this.selectCM);
		this.getFormulaire().add(new JLabel("TD :"));
		this.getFormulaire().add(this.nbGroupesTD);
		this.getFormulaire().add(this.nbGroupesTDRestant);
		this.getFormulaire().add(new JLabel("TP :"));
		this.getFormulaire().add(this.nbGroupesTP);
		this.getFormulaire().add(this.nbGroupesTPRestant);
		this.getFormulaire().add(this.boutonAjouter);
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#creerInformations()
	 */
	@Override
	public void creerInformations() {
		super.creerInformations();

		this.buttonSupprimer = new JButton(
				"<html><center>Supprimer<br>le service<br>sélectionné</center></html>");
		this.buttonSupprimer.setActionCommand("gererService");
		this.buttonSupprimer.addActionListener(this.getListener());
		this.buttonChoisir = new JButton(
				"<html><center>Choisir<br>le service<br>sélectionné</center></html>");
		this.buttonChoisir.setActionCommand("choisirServiceDispo");
		this.buttonChoisir.addActionListener(this.getListener());

		super.getInformations().add(this.buttonSupprimer, new CC().dockEast());
		super.getInformations().add(this.buttonChoisir, new CC().dockEast());
		this.setGestionDispoEnabled(false);
		this.setGestionEnabled(false);
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#creerContenuEns()
	 */
	@Override
	public void creerContenuEns() {
		super.creerContenuEns();
		this.creerFormulaireEnseignement();
		super.getContenuEns().add(this.getFormulaire(), new CC().dockNorth());
	}

	/**
	 * Dégrise le bouton ajouter.
	 */
	@Override
	public void validerBoutonAjout() {
		boolean isNonVide = (this.listeCoursNonVide());
		boolean isIntTD = (this.nbGroupesTD.getText().isEmpty() || Pattern
				.matches("\\d+", this.nbGroupesTD.getText()));
		boolean isIntTP = (this.nbGroupesTP.getText().isEmpty() || Pattern
				.matches("\\d+", this.nbGroupesTP.getText()));

		boolean hasService;
		try {
			hasService = (this.selectCM.isSelected()
					|| new Integer(this.nbGroupesTD.getText()) > 0 || new Integer(
					this.nbGroupesTP.getText()) > 0);
		} catch (NumberFormatException e) {
			hasService = false;
		}

		this.boutonAjouter.setEnabled(isNonVide && isIntTD && isIntTP
				&& hasService);
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#creerContenuTAdmin()
	 */
	@Override
	public void creerContenuTAdmin() {
		super.creerContenuTAdmin();
		this.creerFormulaireTacheAdministrative();
		super.getContenuEns().add(this.getFormulaire(), new CC().dockNorth());
	}

	/**
	 * Dégrise le bouton ajouter dans l'onglet tâche administrative.
	 */
	public void validerBoutonAjoutTA() {
		// boolean isNonVide = (this.listeEnseignantNonVide());
		boolean isNonVideDesc = (!(this.formulaireTADescription.getText()
				.isEmpty()));
		boolean isNonVideHetd = (this.formulaireTAHetd.getText().isEmpty() || Pattern
				.matches("\\d+", this.nbGroupesTP.getText()));
		boolean estSupHeqt;
		try {
			estSupHeqt = (new Integer(this.formulaireTAHetd.getText()) > 0);
		} catch (NumberFormatException e) {
			estSupHeqt = false;
		}

		this.formulaireTABoutonAjouter.setEnabled(isNonVideDesc
				&& isNonVideHetd && estSupHeqt);
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#creerContenuEnsDispo()
	 */
	@Override
	public void creerContenuEnsDispo() {
		super.creerContenuEnsDispo();
		// this.creerFormulaireEnsDispo();
		super.getContenuEns().add(this.getFormulaire(), new CC().dockNorth());
	}

	/**
	 * Remplit le formulaire pour l'ajout d'un nouvel enseignement à partir de
	 * ceux encore disponibles.
	 */
	public void serviceDispoChoisi() {
		this.setGestionDispoEnabled(false);
		Cours c = null;
		boolean cm = false;
		int td = 0;
		int tp = 0;
		int selected = this.getTableEnsDispo().getSelectedRow();
		selected = this.getTableEnsDispo().convertRowIndexToModel(selected);
		if (selected >= 0) {
			PseudoEnseignement pe = this.getEnsDispoTableModel().getDonneeAt(
					selected);
			c = pe.getCours();
			cm = pe.isCmLibre();
			td = pe.getGroupesTDLibres();
			tp = pe.getGroupesTPLibres();
		}

		this.getListeCours().setSelectedItem(c);
		this.selectCM.setSelected(cm);
		this.nbGroupesTD.setText(new Integer(td).toString());
		this.nbGroupesTP.setText(new Integer(tp).toString());
		this.validerBoutonAjout();
		this.getFrame().getTabs().setSelectedIndex(0);
	}

	/**
	 * Formulaire d'ajout d'une Tache Administrative.
	 */
	public void creerFormulaireTacheAdministrative() {
		if (this.formulaireTA == null) {

			this.formulaireTA = new JPanel(new MigLayout("", "10[grow,fill]10",
					"10[]"));

			// Création des composants
			/*
			 * this.formulaireTAEnseignant = new JComboBox(this
			 * .getCollEnseignantsArray());
			 * this.formulaireTAEnseignant.insertItemAt(new String("-"), 0);
			 * this.formulaireTAEnseignant.setSelectedIndex(0);
			 * this.formulaireTAEnseignant.setActionCommand("ajoutEnsNom");
			 * this.
			 * formulaireTAEnseignant.addActionListener(this.getListener());
			 */

			this.formulaireTADescription = new JTextField(20);
			this.formulaireTADescription.setName("ajoutTADesc");
			this.formulaireTADescription.addKeyListener(this.getListener());

			this.formulaireTAHetd = new JTextField("0", 20);
			this.formulaireTAHetd.setName("ajoutTAhetd");
			this.formulaireTAHetd.addKeyListener(this.getListener());

			this.formulaireTABoutonAjouter = new JButton("Ajouter");
			this.formulaireTABoutonAjouter
					.addActionListener(this.getListener());
			this.formulaireTABoutonAjouter.setActionCommand("validerAjouterTA");
			this.formulaireTABoutonAjouter.setEnabled(false);

			// Ajout
			// this.formulaireTA.add(new JLabel("Enseignant"));
			// this.formulaireTA.add(this.formulaireTAEnseignant);
			this.formulaireTA.add(new JLabel("Description :"));
			this.formulaireTA.add(this.formulaireTADescription);
			this.formulaireTA.add(new JLabel("Nombre Heure Equivalent TD :"));
			this.formulaireTA.add(this.formulaireTAHetd);

			this.formulaireTA.add(this.formulaireTABoutonAjouter);
		} else {
			// Réinitialisation
			this.formulaireTADescription.setText("");
			this.formulaireTAHetd.setText("0");
			// this.formulaireTAEnseignant.setSelectedIndex(0);
		}
		if (this.getFormulaireTA() != null) {
			this.getContenuTachesAdmin().remove(this.getFormulaire());
			this.getContenuTachesAdmin().validate();
		}
		this.setFormulaireTA(this.formulaireTA);

		this.getContenuTachesAdmin().add(this.getFormulaireTA(),
				new CC().dockNorth());
		this.getContenuTachesAdmin().validate();
	}

	/**
	 * Active/désactive le bouton <code>Supprimer</code>.
	 * 
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#activeGestionEns()
	 */
	@Override
	public void activeGestionEns() {
		boolean b = false;
		int selected = this.getTableEns().getSelectedRow();
		// Aucune ligne sélectionné : -1
		if (selected < 0) { return; }
		selected = this.getTableEns().convertRowIndexToModel(selected);

		if (selected >= 0) {
			Service s = this.getEnsTableModel().getDonneeAt(selected);

			b = (s.getEnseignant().equals(this.utilCourant) && !s.estValide());
		}

		this.setGestionEnabled(b);
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#gereEns()
	 */
	@Override
	public void gereEns() {
		int selected = this.getTableEns().getSelectedRow();
		selected = this.getTableEns().convertRowIndexToModel(selected);

		if (selected >= 0) {
			Service s = this.getEnsTableModel().getDonneeAt(selected);

			this.supprimeService(s);
		}
	}

	/**
	 * Active/désactive le bouton <code>Supprimer</code>.
	 * 
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#activeGestionTAdmin()
	 */
	@Override
	public void activeGestionTAdmin() {
		boolean b = false;
		int selected = this.getTableTAdmin().getSelectedRow();
		// Aucune ligne sélectionné : -1
		if (selected < 0) { return; }
		selected = this.getTableTAdmin().convertRowIndexToModel(selected);

		if (selected >= 0) {
			Service s = this.getTAdminTableModel().getDonneeAt(selected);

			b = (s.getEnseignant().equals(this.utilCourant) && !s.estValide());
		}

		this.setGestionEnabled(b);
	}

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#gereTAdmin()
	 */
	@Override
	public void gereTAdmin() {
		int selected = this.getTableTAdmin().getSelectedRow();
		selected = this.getTableTAdmin().convertRowIndexToModel(selected);

		if (selected >= 0) {
			Service s = this.getTAdminTableModel().getDonneeAt(selected);

			this.supprimeService(s);
		}
	}

	/**
	 * Active/désactive le bouton pour utiliser un enseignement encore libre.
	 */
	@Override
	public void activeGestionDispo() {
		int selected = this.getTableEnsDispo().getSelectedRow();
		// Aucune ligne sélectionné : -1
		if (selected < 0) { return; }
		selected = this.getTableEnsDispo().convertRowIndexToModel(selected);

		this.setGestionDispoEnabled((selected >= 0));
	}

	/**
	 * Active/désactive le bouton de suppression de services.
	 * 
	 * @param b
	 *            activé/désactivé.
	 * 
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#setGestionEnabled(boolean)
	 */
	@Override
	public void setGestionEnabled(boolean b) {
		this.buttonSupprimer.setEnabled(b);
	}

	/**
	 * Active/désactive le bouton de choix de services dans la liste des
	 * disponibles.
	 * 
	 * @param b
	 *            activé/désactivé.
	 */
	@Override
	public void setGestionDispoEnabled(boolean b) {
		this.buttonChoisir.setEnabled(b);
	}

	/**
	 * Ajoute un nouvel enseignement avec les choix du formulaire.
	 */
	public void ajouterEnseignement() {
		Enseignement e = new Enseignement();
		Cours cours = ((Cours) this.getListeCours().getSelectedItem());
		e.setCours(cours);
		e.setCMEnCharge(this.selectCM.isSelected());

		String tmp = this.nbGroupesTD.getText();
		if (tmp.isEmpty())
			e.setNbGroupesTDEnCharge(0);
		else
			e.setNbGroupesTDEnCharge(new Integer(tmp));

		tmp = this.nbGroupesTP.getText();
		if (tmp.isEmpty())
			e.setNbGroupesTPEnCharge(0);
		else
			e.setNbGroupesTPEnCharge(new Integer(tmp));

		if (cours.estPossible(e)) {
			this.ajouterService(e);
		} else {
			JOptionPane
					.showMessageDialog(
							null,
							new JLabel(
									"<html>L'enseignement proposé n'est pas compatible avec les enseignements"
											+ " <br />déjà validé par le coordonnateur </html>"),
							"Problème affectation", JOptionPane.ERROR_MESSAGE);
		}
	}

	/**
	 * Ajoute une nouvelle tâche administrative avec les choix du formulaire.
	 */
	public void ajouterTacheAdministrative() {
		TacheAdministrative ta = new TacheAdministrative(this.utilCourant,
				this.formulaireTADescription.getText(), new Integer(
						this.formulaireTAHetd.getText()));

		this.ajouterService(ta);
	}

	/**
	 * Ajoute un service à la base de données.
	 * 
	 * @param nouveauService
	 *            le nouveau service a insérer dans la base de données.
	 */
	protected void ajouterService(Service nouveauService) {
		DaoService daoService = this.getFabrique().getDaoService();
		nouveauService.setEnseignant(this.utilCourant);
		Connexion<?> connexion = daoService.getConnexion();

		try {
			connexion.ouvrir();
			connexion.beginTransaction();
			daoService.create(nouveauService);
			connexion.commitTransaction();

			if (nouveauService instanceof Enseignement) {
				Enseignement s = (Enseignement) nouveauService;
				this.getEnsTableModel().ajouterLigne(s);
				s.getCours().ajouterEnseignement(s);
				this.utilCourant.ajouterEnseignement(s);
			} else if (nouveauService instanceof TacheAdministrative) {
				this.getTAdminTableModel().ajouterLigne(
						(TacheAdministrative) nouveauService);
				this.utilCourant
						.ajouterTacheAdministrative((TacheAdministrative) nouveauService);
			}

			DaoEnseignant daoEns = this.getFabrique().getDaoEnseignant();
			daoEns.getConnexion().ouvrir();
			daoEns.getConnexion().beginTransaction();
			daoEns.read(this.utilCourant);
			daoEns.getConnexion().commitTransaction();
			daoEns.getConnexion().fermer();

			this.reInititaliseFormulaire();
			this.getFrame().setStatus("Nouveau service ajouté");
		} catch (DaoException e) {
			Main.getJournal().logException(e);
			if (connexion.transactionEnCours())
				try {
					connexion.rollbackTransaction();
				} catch (ConnexionException e1) {
					Main.getJournal().logException(e, "Erreur de connexion",
							false, true);
				}
		} finally {
			try {
				connexion.fermer();
			} catch (ConnexionException e) {
				Main.getJournal().logException(e, "Erreur fermeture connexion");
			}
		}
	}

	/**
	 * Supprime un service.
	 * 
	 * @param service
	 *            service à supprimer.
	 */
	protected void supprimeService(Service service) {
		this.setGestionEnabled(false);
		DaoService daoServ = this.getFabrique().getDaoService();
		Connexion<?> connexion = daoServ.getConnexion();

		try {
			connexion.ouvrir();
			connexion.beginTransaction();

			if (!service.estValide()) {
				daoServ.delete(service);
			}

			connexion.commitTransaction();

			if (service instanceof Enseignement) {
				Enseignement s = (Enseignement) service;
				this.getEnsTableModel().enleverLigne(s);
				s.getCours().supprimerEnseignement(s);
			} else if (service instanceof TacheAdministrative)
				this.getTAdminTableModel().enleverLigne(
						(TacheAdministrative) service);

			DaoEnseignant daoEns = this.getFabrique().getDaoEnseignant();
			daoEns.getConnexion().ouvrir();
			daoEns.getConnexion().beginTransaction();
			daoEns.read(this.utilCourant);
			daoEns.getConnexion().commitTransaction();
			daoEns.getConnexion().fermer();

			this.reInititaliseFormulaire();
			this.getFrame().setStatus("Service enlevé");
		} catch (DaoException e1) {
			Main.getJournal().logException(e1);
			if (connexion.transactionEnCours())
				try {
					connexion.rollbackTransaction();
				} catch (ConnexionException e2) {
					Main.getJournal().logException(e2, "Erreur de connexion",
							false, true);
				}
		} finally {
			try {
				connexion.fermer();
			} catch (ConnexionException e) {
				Main.getJournal().logException(e, "Erreur fermeture connexion");
			}
		}
	}

	/**
	 * Filtre la liste des services pour afficher seulement ceux de
	 * l'utilisateur courant.
	 */
	public void getChoixPersonnels() {
		this.getEnsTableModel().clearDonnees();
		this.getTAdminTableModel().clearDonnees();

		Collection<Service> collServ = this.utilCourant.getServices();
		Collections.sort((List<Service>) collServ);

		for (Service s : collServ) {
			if (s.getEnseignant().equals(this.utilCourant)) {
				if (s instanceof Enseignement) {
					this.getEnsTableModel().ajouterLigne((Enseignement) s);
				} else if (s instanceof TacheAdministrative) {
					this.getTAdminTableModel().ajouterLigne(
							(TacheAdministrative) s);
				}

			}
		}

		this.getEnsTableModel().fireTableDataChanged();
		this.getTAdminTableModel().fireTableDataChanged();

		this.getFrame().setStatus("Choix personnels");
	}

	/**
	 * Indique si un choix d'enseignant est est fait.
	 * 
	 * @return <code>true</code> si un choix d'enseignant est selectionné.
	 * 
	 *         public boolean listeEnseignantNonVide() { return
	 *         (this.getListeEnseignants().getSelectedIndex() > 0); }
	 */

	/**
	 * @see fr.unice.gnpt.gui.utilisateur.Utilisateur#reInititaliseFormulaire()
	 */
	@Override
	public void reInititaliseFormulaire() {
		if (this.getFrame().getTabs().getSelectedIndex() == 0) {
			this.getListeCours().setSelectedItem(0);
			this.getListeCours().validate();
			this.nbGroupesTD.setText("0");
			this.nbGroupesTP.setText("0");
			this.selectCM.setSelected(false);
			this.boutonAjouter.setEnabled(false);
		} else if (this.getFrame().getTabs().getSelectedIndex() == 1) {
			this.formulaireTADescription.setText("");
			this.formulaireTAHetd.setText("");
			this.formulaireTABoutonAjouter.setEnabled(false);
		}
	}

	/**
	 * Rempli les JTextField, nbGoupeTd et nbGroupeTp avec le nombre de [td|tp]
	 * restant.
	 */
	public void afficheRestant() {
		if (this.getListeCours().getSelectedIndex() > 0) {
			Cours cours = (Cours) this.getListeCours().getSelectedItem();

			this.nbGroupesTDRestant.setText("Restant : "
					+ cours.getNbGroupeTDRestant() + " / "
					+ cours.getNbGroupesTD());

			this.nbGroupesTPRestant.setText("Restant : "
					+ cours.getNbGroupeTPRestant() + " / "
					+ cours.getNbGroupesTP());

			// Activation dynamique des formulaires
			this.selectCM.setEnabled(!cours.cmEnCharge());
			this.nbGroupesTD.setEnabled((cours.getNbGroupeTDRestant() > 0));
			this.nbGroupesTP.setEnabled((cours.getNbGroupeTPRestant() > 0));
		} else {
			// On gris tout
			this.selectCM.setEnabled(false);
			this.nbGroupesTD.setEnabled(false);
			this.nbGroupesTP.setEnabled(false);
		}
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "enseignant";
	}

}
